# edited by levi
# 一个struct串口打包例程

# l：表示 long类型
# d:表示 double类型
# x：用于占位，不产生任何输出。
# c：char，一个字节。
# b：signed char，一个字节。
# B：unsigned char，一个字节。
# h：short，两个字节。
# H：unsigned short，两个字节。
# i：int，四个字节。
# I：unsigned int，四个字节。
# f：float，四个字节。
# s：string，字符串。

# @ 本地字节顺序、大小和对齐
# = 本地字节顺序，标准大小和对齐
# < 小端字节顺序，标准大小和对齐
# > 大端字节顺序，标准大小和对齐
# ! 网络字节顺序（大端）

from maix import app, uart, pinmap, time
import sys
import struct

# ports = uart.list_devices()
# pinmap.set_pin_function("A16", "UART0_TX")
# pinmap.set_pin_function("A17", "UART0_RX")
device = "/dev/ttyS0"
serial0 = uart.UART(device, 115200)

def send_four_uchar(c1,c2,c3,c4):
    sentdata = struct.pack("<BBBBBB",
                   0xFE,
                   c1,
                   c2,
                   c3,
                   c4,
                   0xFF
                   )
    serial0.write(sentdata)
    print(sentdata)

# serial0.write("hello 1\r\n".encode())
# serial0.write_str("hello 2\r\n")

while not app.need_exit():
    data = serial0.read()
    if data:
        print("Received, type: {}, len: {}, data: {}".format(type(data), len(data), data))
        serial0.write(data)
    send_four_uchar(1,2,3,4)

    time.sleep_ms(1) # sleep 1ms to make CPU free



